import upload from '@dfeidao/atom-mobile/fs/upload';
import camera from '@dfeidao/atom-mobile/image-crop-picker/camera';
import { IFeidaoAiMobile } from '@dfeidao/atom-mobile/interfaces';
import get from '@dfeidao/atom-mobile/local/get';
import nodejs from '@dfeidao/atom-mobile/msg/nodejs';
import service from '@dfeidao/atom-mobile/msg/service';
import toast from '@dfeidao/atom-mobile/msgbox/toast';
import { file_url, fileurl, productid, secretId, secretKey, spaceid, systemid } from '../atom/config';
import remove_file from '../atom/remove-file';
export default async function a007(fd: IFeidaoAiMobile, a: {}, args: {
	headimg: {};  // 学生头像
	phone: string; //  学生家长电话
	sex: string; // 学生性别
	student_name: string; // 学生姓名
	student_no: string; // 学生编号
	whether_enter_face: string; // 是否录入人脸
	class_name: string; // 班级名称
	class_id: string; // 班级编号
	sign_back: number; // 是否已签退
	parent_number: string; // 家长编号
	parent_name: string; // 家长名称
}) {
	// 人脸录入
	let filename_id = ''; // 录入失败删除图片
	try {
		// 调用相机
		const img = await camera({
			cropping: false,
			compressImageQuality: 0.5
		}) as { path: string, mime: string };

		// 上传
		const files = [
			{
				name: '',
				filename: img.mime.replace('image/', ''),
				filepath: img.path,
				filetype: img.mime
			}
		];
		const ress = await upload(fd, {
			files,
			toUrl: `${file_url}/upload?productid=${productid}`,
			method: 'POST',
			headers: {
				'Accept': 'application/json'
			}
		}, '', '') as { code: number, msg: [{ _id: string, filename: string }] };
		filename_id = ress.msg[0].filename;
		if (ress.code !== 1) {
			toast({
				type: 'danger', // 'danger' | 'success' | 'warning'
				text: '上传失败',
				position: 'top' // 'top' | 'bottom' | 'center'
			});
		}
		// 腾讯云人脸识别创建人员
		const res1 = await service<{
			faceId: string, // 人脸图片唯一标识
			requestId: string, // 唯一请求 ID，每次请求都会返回。定位问题时需要提供该次请求的 RequestId。
			personid: string, // 人员id
			msg: string, // 结果描述
			code: number // 成功标识：1 成功；0 失败
		}>('thirdpart.tencentcloud.createperson', {
			productid,// 当前项目productid
			spaceid,// 当前项目systemid
			systemid,// 当前项目spaceid
			secretId,// 密钥ID
			secretKey,// 密钥Key
			gender: Number(args.sex) === 0 ? 1 : 2,// 0代表未填写，1代表男性，2代表女性。
			student_no: args.student_no,// 人员ID
			student_name: args.student_name,// 人员名称。[1，60]个字符，可修改，可重复。
			fileurl,// 人脸存放的服务器地址
			fileid: ress.msg[0].filename // 人脸唯一标识。
		});
		if (res1.code !== 1) {
			toast({
				type: 'danger', // 'danger' | 'success' | 'warning'
				text: '创建人员失败',
				position: 'top' // 'top' | 'bottom' | 'center'
			});
		}
		// 腾讯云人脸识别创建人脸
		const res2 = await service<{
			SucFaceNum: string, // 加入成功的人脸数量
			SucFaceIds: string, // 加入成功的人脸ID列表
			RetCode: string, // 每张人脸图片添加结果，-1101 代表未检测到人脸，-1102 代表图片解码失败，其他非 0 值代表算法服务异常。
			RequestId: string, // 唯一请求 ID，每次请求都会返回。定位问题时需要提供该次请求的 RequestId。
			msg: string, // 结果描述
			code: number // 成功标识：1 成功；0 失败
		}>('thirdpart.tencentcloud.createpersonface', {
			productid,// 当前项目productid
			spaceid,// 当前项目systemid
			systemid,// 当前项目spaceid
			secretId,// 密钥ID
			secretKey,// 密钥Key
			PersonId: res1.personid,// 人员id
			fileurl,// 人脸存放的服务器地址。
			fileid: ress.msg[0].filename // 人脸唯一标识。
		});
		if (res1.code !== 1) {
			toast({
				type: 'danger', // 'danger' | 'success' | 'warning'
				text: '创建人脸失败',
				position: 'top' // 'top' | 'bottom' | 'center'
			});
		}

		//  添加图库
		const user = get(fd, 'params') as {
			teacher_name: string;
			productid: string;
			teacher_no: string;
		};
		const params = {
			student_no: args.student_no, // 学生编号
			faceid: ress.msg[0].filename, // 图片id
			sucfaceids: res2.SucFaceIds, // 人脸id
			productid: user.productid // 产品ID
		};
		const res = await nodejs<{ code: number }>('app-check-status/s003', {
			params
		});
		if (res.code !== 0) {
			toast({
				type: 'success', // 'danger' | 'success' | 'warning'
				text: '添加图库成功',
				position: 'top' // 'top' | 'bottom' | 'center'
			});
		} else {
			toast({
				type: 'danger', // 'danger' | 'success' | 'warning'
				text: '添加图库失败',
				position: 'top' // 'top' | 'bottom' | 'center'
			});
		}
	} catch (err) {
		console.log(err);
		// 删除服务器图片
		if (filename_id) {
			await remove_file(file_url, productid, [filename_id]);
		}
		if (err.indexOf('图片中没有人脸') === -1) {
			toast({
				type: 'danger',
				text: '图片中没有人脸',
				position: 'top'
			});
		} else {
			toast({
				type: 'danger',
				text: '上传失败',
				position: 'top'
			});
		}
	}
}
